home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 11 / FM Towns Free Software Collection 11.iso / t_os / shell / burden2 / src / burden2.c next >
Encoding:
C/C++ Source or Header  |  1995-05-26  |  6.0 KB  |  259 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <winb.h>
  5. #include <te.h>
  6. #include <fntb.h>
  7. #include <gui.h>
  8. #include <egb.h>
  9. #include <guidbg.h>
  10.  
  11. #include <mos.h>
  12. #include <eintm.h>
  13. #include <kh.h>
  14.  
  15. char    *guiEgbPtr ;            /*    EGB のワークアドレス    */
  16.  
  17. int    iconDialogID = -1 ;
  18. int    iconQuitIconID = -1 ;
  19. int    barIconID = -1 ;
  20.  
  21. unsigned int beforeTime,afterTime;
  22.  
  23. int quitFuncRet = ILLEGAL_FUNCTION ;
  24.  
  25. /*= リジューム用設定=================================================*/
  26. FRAME    RSM_FRAME;
  27. char    RSMID[]="%%% burden2 %%%";
  28. char    RSMTITLE[]= "burden2                         By 機拡";
  29.  
  30. int userFunc(apliId, messId, info, data)
  31. int    apliId;
  32. int    messId;
  33. int    info;
  34. int    data;
  35. {
  36.     register int    ret;
  37.  
  38.     ret = ILLEGAL_FUNCTION;
  39.  
  40.     switch(messId)
  41.     {
  42.         case    GM_QUIT :
  43.             MMI_SendMessage(iconQuitIconID,MM_EXEC,2,0,0);
  44.             ret = quitFuncRet ;
  45.             ret = NOERR ;
  46.             break;
  47.     }
  48.  
  49.     return(ret);
  50. }
  51.  
  52. void main()
  53. {
  54.     static MMICTRL mmi ={
  55.                 SCREEN16|SCREENIGNORE,        // ページ0側解像度
  56.                 SCREENUNUSED,                // ページ1側解像度
  57.                 0,                             // 書き込みページ
  58.                 SCREENAVAILABLE,             // 表示ページ
  59.                 0,                             // 表示プライオリティ
  60.                 SCREENAVAILABLE,            // 色数
  61.                 SCREENEXPAND,                 // VRAMの横の長さ
  62.                 0,                             // メモリ領域の大きさ
  63.                 NULL,                         // メモリ領域のアドレス
  64.                 0,                             // ユーザ領域の大きさ
  65.                 NULL,                         // ユーザ領域のアドレス
  66.                 0, 0,                         // 画面枠    lupx,lupy
  67.                 0, 0,                        //            rdwx,rdwy
  68.                 -16384, -16384,                // 移動枠    lupx,lupy
  69.                 16383, 16383,                //            rdwx,rdwy
  70.                 15,                         // 白色
  71.                 8,                          // 黒色
  72.                 7,                          // 灰色
  73.                 6                             // 反転色
  74.     };
  75.  
  76.     extern int APL_init() ;
  77.     extern int APL_end() ;
  78.  
  79.     /*    初期化処理    */
  80.     if (MMI_Open( &mmi ) == NOERR)
  81.     {
  82.         /*    初期化に成功すればメインループに入る.    */
  83.         if (APL_init() == NOERR)
  84.         {
  85.             MMI_ExecSystem() ;
  86.             APL_end();
  87.         }
  88.     }
  89.  
  90.     /*    終了処理    */
  91.     MMI_Close() ;
  92.  
  93. }
  94.  
  95. int APL_init()
  96. {
  97.     extern MMIINIT    initDataGUI ;
  98.  
  99.     register int    ret ;
  100.  
  101.     /*    EGB ワークアドレスの取得.    */
  102.     guiEgbPtr = MMI_GetEgbPtr() ;
  103.  
  104.     /*    ユーザアイコン設定        */
  105.     extern unsigned char *iconTbl[];
  106.     extern int iconMaxId;
  107.     MMI_SetIconTable(iconTbl, iconMaxId);
  108.  
  109.     /*    ハイパ型部品の初期化            */
  110.     if ((ret = MMI_initHyper()) < 0)
  111.         return ret ;
  112.     /*    ダイアログ型部品の初期化        */
  113.     if ((ret = MMI_initDialogL40()) < 0)
  114.         return ret ;
  115.     /*    ボタン型部品の初期化            */
  116.     if ((ret = MMI_initButtonL40()) < 0)
  117.         return ret ;
  118.     /*    アイコンボタン型部品の初期化    */
  119.     if ((ret = MMI_initIconL40()) < 0)
  120.         return ret ;
  121.  
  122.     /*    背景データの初期化                        */
  123.  
  124.     /*    データの登録        */
  125.     if ((ret = MMI_Init(&initDataGUI)) < 0)
  126.         return ret ;
  127.  
  128.     //    Tmenuにパレットを合わせる
  129.     KH_initGuiColor();
  130.  
  131.     /*----------------------------------------------------------------*/
  132.     /*  リジューム読み込み (※のついた処理は必ず行ってください)       */
  133.     /*----------------------------------------------------------------*/
  134.     char    work[RSMWORKSIZE];    // リジュームマネージャのワークエリア
  135.     char    buf[250];
  136.     char    *ptr;
  137.     int        size, x, y;
  138.     HYPER    hyp;
  139.  
  140.     // リジュームマネージャの初期化
  141.     EIN_rsmInit( work, RSMID );
  142.     // 読み込みバッファ設定
  143.     EIN_rsmBufSet( work, buf, 250 );
  144.     // リジューム情報読み込み
  145.     size = EIN_rsmLoad( work );
  146.     #ifdef DEBUG
  147.     printf(" resume size(%d)\n",size);
  148.     #endif
  149.     if ( size > 0 ){
  150.         // 表示位置
  151.         if ( ((ptr = strstr(buf,"\nPANEL: ")) != NULL ) &&
  152.              (sscanf(ptr,"\nPANEL: %d %d\n", &x, &y) > 1 ) ){
  153.             // 枠座標を得る
  154.             MMI_SendMessage( iconDialogID, MM_GETHYPER, 1, &hyp );
  155.             RSM_FRAME.lupx = x;
  156.             RSM_FRAME.lupy = y;
  157.             RSM_FRAME.rdwx = x+(hyp.fr.rdwx-hyp.fr.lupx);
  158.             RSM_FRAME.rdwy = y+(hyp.fr.rdwy-hyp.fr.lupy);
  159.             #ifdef DEBUG
  160.             printf("PANEL: move to (%d,%d)\n", x, y);
  161.             #endif
  162.             MMI_SendMessage( iconDialogID, MM_MOVE, 1, &RSM_FRAME ) ;
  163.         }
  164.     } else {
  165.         #ifdef DEBUG
  166.         printf("Can't find resume file.\n");
  167.         #endif
  168.     }
  169.  
  170.     /*    背景を表示する                            */
  171.     MMI_SendMessage(MMI_GetBaseObj(), MM_SHOW, 0) ;
  172.  
  173.     MMI_SendMessage(MMI_GetBaseObj(), MM_SETEXEC, 1, userFunc);
  174.     MMI_CallMessage(MMI_GetApliId(), GM_TITLE, (int)RSMTITLE, 0);
  175.  
  176.     extern void    userIdleTask();
  177.     MMI_SetIdleTaskFunc( userIdleTask );
  178.     beforeTime = MOS_getTime();
  179.     userIdleTask();
  180.  
  181.     return NOERR ;
  182. }
  183.  
  184. int APL_end()
  185. {
  186.     /*===================================================================*/
  187.     /* リジューム情報更新 (※がついた処理は必ず行って下さい)             */
  188.     /*===================================================================*/
  189.     char    work[RSMWORKSIZE];
  190.     char    buf[250];
  191.     char    aplpath[128];
  192.     HYPER    hyp;
  193.     register int ret;
  194.     
  195.     // 枠座標を得る
  196.     MMI_SendMessage( iconDialogID, MM_GETHYPER, 1, &hyp );
  197.     
  198.     // 移動していたらセーブ
  199.     if ( (RSM_FRAME.lupx  != hyp.fr.lupx) ||
  200.          (RSM_FRAME.lupy  != hyp.fr.lupy) ){
  201.         // マネージャ初期化
  202.         EIN_rsmInit( work, RSMID );
  203.         // バッファ設定(アプリ識別ID,更新時刻は自動設定されます)
  204.         EIN_rsmBufSet( work, buf, 250 );
  205.         // アプリディレクトリ保存
  206.         MMI_CallMessage( MMI_GetApliId(), GM_QUERYID, QM_PATH, (int)aplpath );
  207.         EIN_rsmBufPrintf( work, "APLPATH: %s", aplpath );
  208.         // アプリ名保存
  209.         EIN_rsmBufPrintf( work, "TITLE:   %s", RSMTITLE );
  210.         // コメント保存
  211.         EIN_rsmBufCat( work, "COMMENT: アイドルタスクの負荷を測りまっす");
  212.         // アイコン位置保存
  213.         EIN_rsmBufPrintf( work, "PANEL: %d %d", hyp.fr.lupx, hyp.fr.lupy );
  214.         // バッファ終端(^A)設定
  215.         EIN_rsmBufTail( work );
  216.         // バッファをセーブ
  217.         ret = EIN_rsmSave( work );
  218.         #ifdef DEBUG
  219.         printf(" resume save size(%d)   ptr:(%d,%d)\n",ret, hyp.fr.lupx, hyp.fr.lupy);
  220.         #endif
  221.     }
  222.  
  223.     return NOERR;
  224. }
  225.  
  226. void userIdleTask(void)
  227. {
  228.     register unsigned int i;
  229.  
  230.     afterTime = MOS_getTime();
  231.  
  232.     i = afterTime - beforeTime;
  233.  
  234.     if(i>31) i = 545 ;
  235.         else i += 513 ;
  236.  
  237.     MMI_SendMessage(barIconID,MM_SETSHAPE,1,i);
  238.     MMI_SendMessage(barIconID,MM_SHOW,0);
  239.  
  240.     beforeTime = afterTime;
  241.  
  242.     return ;
  243. }
  244.  
  245. /*    initDataGUI:iconQuitIconID:MJ_ICONL40の呼び出し関数    */
  246. int    iconQuitFunc(kobj, messId, argc, pev, trigger)
  247. int        kobj ;
  248. int        messId ;
  249. int        argc ;
  250. EVENT    *pev ;
  251. int        trigger ;
  252. {
  253.     MMI_SetHaltFlag(TRUE);
  254.     quitFuncRet = NOERR ;
  255.  
  256.     return NOERR ;
  257. }
  258.  
  259.